﻿#region Acerca de...
/////////////////////////////////////////////////////////////////////////////
// Instituto Tecnológico de Costa Rica
// Proyecto: Administración de Proyectos de Investigación del Centro de 
//           Investigaciones en Computación
// Descripción: Clase de acceso a datos para tabla 'SGAPFUSUARIOS'
// Generado por Andrés Aguilar 
// Fecha: Martes, 10 de Enero de 2012, 05:07:00 p.m.
////////////////////////////////////////////////////////////////////////////
#endregion

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace API_CIC.CapaDatos
{
    public class cUsuariosDatos
    {

        /// <summary>
        /// Propósito: Inserta un usuario p_usuario a la base de datos
        /// </summary>
        public static void Insertar(SGAPFUSUARIO p_usuario)
        {
            //_datacontext.SGAPFUSUARIOs.InsertOnSubmit(p_usuario);

            try
            {
              //  _datacontext.SubmitChanges();
                string sql = "INSERT INTO SGAPFUSUARIOS(ID_CEDULA,TXT_USUARIO,TXT_CONTRASENA,NOM_USUARIOS,NOM_APELLIDO1,NOM_APELLIDO2,TXT_EMAIL,TXT_TELEFONO,COD_ESCUELA,COD_ROLADMIN)" +
                "VALUES (" + p_usuario.ID_CEDULA + ",'" + p_usuario.TXT_USUARIO + "','" + p_usuario.TXT_CONTRASENA + "','" + p_usuario.NOM_USUARIOS + "','" + p_usuario.NOM_APELLIDO1 + "','" + p_usuario.NOM_APELLIDO2 + "','" + p_usuario.TXT_EMAIL + "','" + p_usuario.TXT_TELEFONO + "'," + p_usuario.COD_ESCUELA + "," + p_usuario.COD_ROLADMIN + ")";
                _datacontext.ExecuteCommand(sql);
            }
            catch (Exception ex)
            {
                //throw new ITCRException("cGestionUsuarios: :Ingresar: :Ocurrió un error.", ex);
            }
        }


        /// <summary>
        /// Propósito: Modifica los datos del registro con la cédula del usuario y los nuevos datos dentro de un mismo usuario p_usuario
        /// </summary>
        public static void Modificar(SGAPFUSUARIO p_usu)
        {
            var usuario = (from u in _datacontext.SGAPFUSUARIOs
                           where u.ID_CEDULA == p_usu.ID_CEDULA
                           select u).Single();

            var rol = (from r in _datacontext.SGAPFROLEs
                       where r.ID_ROL == p_usu.COD_ROLADMIN
                       select r).Single();

            var escuela = (from es in _datacontext.SGAPFESCUELAs
                           where es.ID_ESCUELA == p_usu.COD_ESCUELA
                           select es).Single();

            var permisos = (from per in _datacontext.SGAPFROL_PERMISOs
                            where per.COD_ROL == rol.ID_ROL
                            select per);
            
            //rol.SGAPFROL_PERMISOs.Clear();
            //rol.SGAPFROL_PERMISOs.AddRange(permisos);
            _datacontext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, rol);
            usuario.SGAPFESCUELA = escuela;
            
            usuario.NOM_APELLIDO1 = p_usu.NOM_APELLIDO1;
            usuario.NOM_APELLIDO2 = p_usu.NOM_APELLIDO2;
            usuario.NOM_USUARIOS = p_usu.NOM_USUARIOS;
            usuario.TXT_CONTRASENA = p_usu.TXT_CONTRASENA; //HAY Q ENCRIPTARLA
            usuario.TXT_EMAIL = p_usu.TXT_EMAIL;
            usuario.TXT_TELEFONO = p_usu.TXT_TELEFONO;
            usuario.TXT_USUARIO = p_usu.TXT_USUARIO;

            usuario.SGAPFROLE = rol;
            //usuario.SGAPFUSUARIO_ROLs.AddRange(p_usu.SGAPFUSUARIO_ROLs);
            
            try
            {
                _datacontext.SubmitChanges();
            }
            catch (Exception ex)
            {
                throw new ITCRException("cGestionUsuarios: :Modificar: :Ocurrió un error.", ex);
            }
        }

        public static void borrarUsuariosRol(int p_proy, int p_usu ){


            _datacontext.ExecuteCommand("DELETE FROM SGAPFUSUARIO_ROL WHERE COD_PROYECTO=" +p_proy+" AND COD_USUARIO=" + p_usu);
            var usuariorol = (from u in _datacontext.SGAPFUSUARIO_ROLs
                           where u.COD_PROYECTO == p_proy && u.COD_USUARIO == p_usu
                           select u);
            System.Collections.IEnumerator enu = usuariorol.GetEnumerator();
            Boolean seborro = false;
            while (enu.MoveNext())
            {
                seborro = true;
                //_datacontext.SGAPFUSUARIO_ROLs.DeleteOnSubmit((SGAPFUSUARIO_ROL)enu.Current);
                
            }
            //
            //if (seborro)
                //_datacontext.SubmitChanges();
        }
        public static void agregarUsuariosRol(SGAPFUSUARIO_ROL ur)
        {
            var usuario = (from u in _datacontext.SGAPFUSUARIOs
                           where u.ID_CEDULA == ur.COD_USUARIO
                           select u).Single();
            var proyecto = (from p in _datacontext.SGAPFPROYECTOs
                           where p.ID_PROYECTO == ur.COD_PROYECTO
                           select p).Single();
            var rol = (from r in _datacontext.SGAPFROLEs
                            where r.ID_ROL == ur.COD_ROL
                            select r).Single();
            ur.SGAPFROLE = rol;
            ur.SGAPFPROYECTO = proyecto;
            ur.SGAPFUSUARIO = usuario;

            //_datacontext.SGAPFUSUARIO_ROLs.InsertOnSubmit(ur);
            _datacontext.ExecuteCommand("INSERT INTO SGAPFUSUARIO_ROL(COD_PROYECTO,COD_ROL,COD_USUARIO) VALUES ("+ur.COD_PROYECTO+","+ur.COD_ROL+","+ur.COD_USUARIO+")");
            //_datacontext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, _datacontext.SGAPFUSUARIO_ROLs);
            //_datacontext.SubmitChanges(); 
            
        }
        /// <summary>
        /// Propósito: Obtiene un usuario con la cédula p_cedula
        /// </summary>
        public static SGAPFUSUARIO GetUsuario(int p_cedula)
        {
            IOrderedQueryable<SGAPFUSUARIO> bs = (IOrderedQueryable<SGAPFUSUARIO>)from usuarios in _datacontext.SGAPFUSUARIOs
                                                                                  where usuarios.ID_CEDULA == p_cedula
                                                                                  select usuarios;

            
            return bs.First();
        }


        /// <summary>
        /// Propósito: Obtiene un usuario con el username
        /// </summary>
        public static SGAPFUSUARIO GetUsuario(String p_user)
        {
            
            
            IOrderedQueryable<SGAPFUSUARIO> bs = (IOrderedQueryable<SGAPFUSUARIO>)from usuarios in _datacontext.SGAPFUSUARIOs
                                                                                  where usuarios.TXT_USUARIO == p_user
                                                                                  select usuarios;
            //_datacontext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, bs.First().SGAPFROLE.SGAPFROL_PERMISOs);
            return bs.First();
        }

        

        private static readonly LinqClasesDataContext _datacontext = new LinqClasesDataContext();

        public static SGAPFESCUELA getEscuela(int p_id)
        {
            IOrderedQueryable<SGAPFESCUELA> bs = (IOrderedQueryable<SGAPFESCUELA>)from es in _datacontext.SGAPFESCUELAs
                                                                                  where es.ID_ESCUELA == p_id
                                                                                  select es;
            return bs.First();
        }
    }
}